#example7_11_shift.py
#coding=utf-8
import matplotlib.pyplot as plt
import pandas as pd

data=[]   # 存储各类数据
titles=[]  # 数据名称

# 读取文件中的数据
data1 = pd.read_excel('stock.xlsx',
                     index_col='Date', usecols='A:E')
print("原始数据的前5行：\n",data1[:5])
data.append(data1)
titles.append("原始数据")

data2=data1.shift(periods=3)
print("移动3个周期后的前5行：\n",data2[:5])
data.append(data2)
titles.append("移动3个周期(未指定填充值)后")

data3=data1.shift(periods=3,fill_value=0)
print("移动3个周期(指定填充值)后的前5行：\n", data3[:5])
data.append(data3)
titles.append("移动3个周期(指定填充值)后")

# 一个周期为1天，日期向前移动（增加）3个周期
data4=data1.shift(periods=3,freq="D")    
print("指定freq，则移动索引值，但不重新排列数据，显示前5行：\n", data4[:5]) 
data.append(data4)
titles.append("指定freq，则移动索引值，不重新排列数据；\n一个周期1天，3个周期")

# 一个周期为2天，日期向前移动（增加）3个周期
data5=data1.shift(periods=3,freq="2D")   
print("指定freq，则移动索引值，但不重新排列数据，显示前5行：\n", data5[:5]) 

print("横向移动1个周期后的前5行数据：\n",
      data1.shift(periods=1,axis=1,fill_value=0)[:5])

# 画图
plt.rcParams['font.sans-serif']=['SimHei']
fig, axes = plt.subplots(ncols=2, nrows=2,figsize=(11,9))

# in 后面的换行符 \ 不能省略
for ax,d,title in \
          zip(axes.ravel(),data,titles):
    ax.plot(d.index,d["Open"],color="red",linestyle="solid",label="Open")
    ax.plot(d.index,d["High"],color="blue",linestyle="dashed",label="High")
    ax.plot(d.index,d["Low"],color="green",linestyle="dashdot",label="Low")
    ax.plot(d.index,d["Close"],color="black",linestyle="dotted",label="Close")
    #选择当前子图
    plt.sca(ax)
    # 设置刻度字体大小
    plt.xticks(fontsize=15,rotation=45)
    plt.yticks(fontsize=15)
    plt.ylabel("价格",fontsize=15)
    plt.title(title,fontsize=15)   
    plt.legend()
    
#调整子图间距
plt.subplots_adjust(wspace=0.2, hspace=0.7)
plt.savefig("shift.png")
plt.show()
